This relates to integrated circuits such as programmable integrated circuits.
Programmable integrated circuits are well known. Programmable integrated circuits can be programmed by a user to implement a desired custom logic function. In a typical scenario, a logic designer uses computer-aided design (CAD) tools to design a custom logic circuit. When the design process is complete, the tools generate configuration data. The configuration data is loaded into programmable integrated circuit memory elements to configure the device to perform the functions of the custom logic circuit. In particular, the configuration data configures programmable interconnects, programmable routing circuits, and programmable logic circuits in the programmable integrated circuits.
It is often desirable to provide circuitry on an integrated circuit with error resiliency. For example, operational errors such as caused by transistor aging or soft error upsets may result in incorrect circuit functionality. To help provide error resiliency, circuitry is sometimes implemented using double modular or triple modular redundancy in which multiple copies of the circuitry are implemented. However, double modular redundancy merely detects the existence of errors and is not capable of correcting the detected errors. Triple modular redundancy is capable of correcting detected errors, but is expensive and requires three times the circuit resources of arrangements in which no redundancy is used.
In some scenarios, background error-detection circuitry using cyclic redundancy checks (CRCs), checksum, parity, or other error-detection code methods are performed. Background cyclic redundancy checks involve sequentially reading configuration data from each programmable element and computing cyclic redundancy checks to validate the data. Programmable elements with incorrect CRC values may be re-loaded with configuration data before a system reboot is performed to restore correct operations. However, a significant delay (e.g., hundreds of milliseconds) is required to load configuration data and reboot the system, during which the circuitry is operating incorrectly and may produce invalid data. Similarly, circuitry may be provided so that the configuration is re-written with correct data, or scrubbed. However, this incurs additional delay (e.g. tens of milliseconds).